package net.comm.common;

import java.util.*;
import java.text.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 公用模块接口
 * 
 * @author longtop's develop(wxsun@longtop.com)
 * @version 3.0
 * @date 2008-1-21 ����02:39:24
 */
public class common {

	/**
	 * @author:
	 * @function:将传入的字符串编码为对应的ASCII码串
	 * @param sql:待编码的sql条件串
	 * @return 编码后的字符串
	 */
	public static String encodeSQL(String sql) {
		StringBuffer tempBuff = new StringBuffer();
		for (int i = 0; i < sql.length(); i++) {
			tempBuff.append(Integer.toHexString(sql.charAt(i)));
		}
		return tempBuff.toString();
	}

	/**
	 * @author:
	 * @function；将传入的ASCII码串解码为对应的字符串
	 * @param encoded:待解码的字符串
	 * @return 解码后的字符串
	 */
	public static String decodeSQL(String encoded) {
		StringBuffer tempBuff = new StringBuffer();
		for (int i = 0; i < encoded.length(); i += 2) {
			tempBuff.append((char) Integer.parseInt(
					encoded.substring(i, i + 2), 16));
		}
		return tempBuff.toString();
	}

	/**
	 * @author:
	 * @param number:待格式化的数
	 * @param intPart:格式化后的整数位数
	 * @param decPart:格式化后的小数位数
	 * @return 格式化后的字符串
	 */
	public static String formatDouble(double number, int intPart, int decPart)

	{

		return new DecimalFormat(genPattern("#", intPart) + "."
				+ genPattern("0", decPart)).format(number);

	}

	/**
	 * 
	 * 产生金额格式化中使用的规则串Pattern
	 * 
	 * @author:
	 * 
	 * @param subStr:子串
	 * 
	 * @param n:子串重复次数
	 * 
	 * @return 金额格式化的规则Pattern
	 * 
	 * 2004-09-01
	 * 
	 */

	public static String genPattern(String subStr, int n)

	{

		StringBuffer temp = new StringBuffer();

		while (n > 0)

		{

			if (subStr.trim().equals("#") && (n == 1))

			{

				temp.append("0");

			}

			else

			{

				temp.append(subStr);

			}

			n--;

		}

		return temp.toString();

	}

	/**
	 * @author:
	 * @param subStr:子串
	 * @param n:子串重复次数
	 * @return 由n个子串重复连接生成的字符串
	 */
	public static String nStr(String subStr, int n) {
		StringBuffer temp = new StringBuffer();
		while (n > 0) {
			temp.append(subStr);
			n--;
		}
		return temp.toString();
	}

	public static String parameter2URL(HttpServletRequest request) {
		java.util.Enumeration abc = request.getParameterNames();
		StringBuffer buf = new StringBuffer();
		buf.append("?");
		while (abc.hasMoreElements()) {
			String kk = (String) abc.nextElement();
			if (!kk.equals("querystring"))
				buf.append(kk + "=" + request.getParameter(kk) + "&");
		}
		buf.deleteCharAt(buf.length() - 1);
		return buf.toString();
	}

	public static String double2str(double amount, int length) {
		String strAmt = Double.toString(amount);
		System.out.println("origin strAmt=" + strAmt);
		int pos = strAmt.indexOf('.');
		System.out.println("pos=" + pos);
		System.out.println("length=" + length);
		if (pos != -1 && strAmt.length() > length + pos + 1)
			strAmt = strAmt.substring(0, pos + length + 1);
		System.out.println("post strAmt=" + strAmt);
		return strAmt;
	}

//	/* 传入： 1。 连接－_conn, 2。连接类型 ， 3。 目录末尾是否加上'/' */
//	public static String GetPath(Connection _conn, String strPathID,
//			char AddSlashOrNot) throws Exception {
//		String strPath;
//		tab_pathprm Ctab_pathprm = new tab_pathprm();
//
//		Ctab_pathprm._conn = _conn;
//		Ctab_pathprm.pathid = strPathID;
//
//		Ctab_pathprm.selectByPK();
//
//		if (Ctab_pathprm._errorcode == 100)
//			throw new Exception("PathID:[" + strPathID + "] no exist");
//
//		strPath = Ctab_pathprm.pathname.trim();
//		if ((AddSlashOrNot == 'Y' || AddSlashOrNot == 'y')) {
//			strPath += "/";
//		}
//		return strPath;
//
//	}
//
//	public static String GetPath(String strPathID, char AddSlashOrNot)
//			throws Exception {
//		String strPath = "";
//		tab_pathprm Ctab_pathprm = new tab_pathprm();
//		Connection conn = null;
//
//		try {
//			conn = StaticConnectionPool.getConnection();
//			Ctab_pathprm._conn = conn;
//			Ctab_pathprm.pathid = strPathID;
//			Ctab_pathprm.selectByPK();
//			if (Ctab_pathprm._errorcode == 100)
//				throw new Exception("PathID:[" + strPathID + "] no exist");
//
//			strPath = Ctab_pathprm.pathname.trim();
//			if ((AddSlashOrNot == 'Y' || AddSlashOrNot == 'y')) {
//				strPath += "/";
//			}
//		} catch (Exception e) {
//			throw e;
//		} finally {
//			if (conn != null) {
//				try {
//					StaticConnectionPool.returnConnection(conn);
//				} catch (Exception fe) {
//					fe.printStackTrace();
//				}
//			}
//		}
//		return strPath;
//	}
//
//	/***************************************************************************
//	 * 说明：适用于香港分行版本,产生各类序列流水号 * 调用方法： 传入分行号,系统日期、序列种类、报文种类、流水号长度、流水号传递变量 *
//	 * 例：String strSeq; * strRet = GenSeq("20020101","SWFT","100",5,&strSeq); *
//	 * 返回值：<"-1",失败，>"-1",流水号 * 创建者:
//	 **************************************************************************/
//	public static String GenSeqNumber(Connection conn, String branch,
//			String strSysDate, String strRefKind, String strSWIFTNO, int iLenSeq)
//			throws Exception {
//		String strZero, strTemp;
//		String strSeq = "";
//		int iSeq;
//		String refkindtmp = strRefKind;
//		String swiftnotmp = strSWIFTNO;
//
//		/*
//		 * if ((strSWIFTNO.length()==3) &&
//		 * (strSWIFTNO.substring(1,2).equals("9")) &&
//		 * (strRefKind.equals("SWFT"))) {
//		 * strSWIFTNO="n"+strSWIFTNO.substring(1); }
//		 */
//		if ((strSWIFTNO.length() == 3) && (strRefKind.equals("SWFT"))) {
//			refkindtmp = "WTO";
//			swiftnotmp = "";
//		}
//		Connection tmpconn = null;
//		tab_seqcctrl seqcctrl = new tab_seqcctrl();
//		try {
//			tmpconn = StaticConnectionPool.getConnection();
//			tmpconn.setAutoCommit(false);
//
//			seqcctrl.oseabh = branch;
//			seqcctrl.date = strSysDate;
//			seqcctrl.refkind = refkindtmp;
//			seqcctrl.swiftno = swiftnotmp;
//			seqcctrl._conn = tmpconn;
//			seqcctrl.selectByPK();
//			if (seqcctrl._errorcode == 0) {
//				seqcctrl.holdByPK();
//				seqcctrl.selectByPK();
//				iSeq = seqcctrl.seq;
//				iSeq++;
//				strTemp = String.valueOf(iSeq);
//				seqcctrl.seq = Integer.parseInt(strTemp);
//				seqcctrl.updateByPK();
//				if (iLenSeq > 0) {
//					strZero = "";
//					for (int i = 0; i < iLenSeq; i++) {
//						strZero = strZero + "0";
//					}
//					strTemp = strZero + strTemp;
//					strTemp = strTemp.substring(strTemp.length() - iLenSeq);
//					strSeq = strTemp;
//				}
//			} else {
//				seqcctrl.seq = 1;
//				seqcctrl.insert();
//
//				if (iLenSeq > 0) {
//					strZero = "";
//					for (int i = 0; i < iLenSeq; i++) {
//						strZero = strZero + "0";
//					}
//					strTemp = strZero + "1";
//					strTemp = strTemp.substring(strTemp.length() - iLenSeq);
//					strSeq = strTemp;
//				}
//			}
//			tmpconn.commit();
//		} catch (Exception e) {
//			tmpconn.rollback();
//			throw e;
//		} finally {
//			if (tmpconn != null) {
//				tmpconn.setAutoCommit(true);
//				StaticConnectionPool.returnConnection(tmpconn);
//			}
//		}
//		return strSeq;
//	}
//
//	/***************************************************************************
//	 * 说明：产生各类序列流水号 * 调用方法： 传入系统日期、序列种类、报文种类、流水号长度、流水号传递变量 * 例：String strSeq; *
//	 * strRet = GenSeq("20020101","SWFT","100",5,&strSeq); * 返回值：<"-1",失败，>"-1",流水号 *
//	 * 创建者:林婕翔
//	 **************************************************************************/
//	public static String GenSeq(Connection conn, String branch,
//			String strSysDate, String strRefKind, String strSWIFTNO, int iLenSeq)
//			throws Exception {
//		String strZero, strTemp;
//		String strSeq = "";
//		int iSeq;
//		String refkindtmp = strRefKind;
//		String swiftnotmp = strSWIFTNO;
//		Connection tmpconn = null;
//		tab_seqcctrl seqcctrl = new tab_seqcctrl();
//		try {
//			tmpconn = StaticConnectionPool.getConnection();
//			tmpconn.setAutoCommit(false);
//			seqcctrl.oseabh = branch;
//			seqcctrl.date = strSysDate;
//			seqcctrl.refkind = refkindtmp;
//			seqcctrl.swiftno = swiftnotmp;
//			seqcctrl._conn = tmpconn;
//			seqcctrl.selectByPK();
//
//			seqcctrl.lastupddate = strSysDate;
//
//			seqcctrl.lastupdtime = DatetimeUtil.getTime();
//			if (seqcctrl._errorcode == 0) {
//				seqcctrl.holdByPK();
//				seqcctrl.selectByPK();
//				iSeq = seqcctrl.seq;
//				iSeq++;
//				strTemp = String.valueOf(iSeq);
//				seqcctrl.seq = Integer.parseInt(strTemp);
//				seqcctrl.updateByPK();
//				if (iLenSeq > 0) {
//					strZero = "";
//					for (int i = 0; i < iLenSeq; i++) {
//						strZero = strZero + "0";
//					}
//					strTemp = strZero + strTemp;
//					strTemp = strTemp.substring(strTemp.length() - iLenSeq);
//					strSeq = strTemp;
//				}
//			} else {
//				seqcctrl.seq = 1;
//				seqcctrl.insert();
//
//				if (iLenSeq > 0) {
//					strZero = "";
//					for (int i = 0; i < iLenSeq; i++) {
//						strZero = strZero + "0";
//					}
//					strTemp = strZero + "1";
//					strTemp = strTemp.substring(strTemp.length() - iLenSeq);
//					strSeq = strTemp;
//				}
//			}
//			tmpconn.commit();
//		} catch (Exception e) {
//			tmpconn.rollback();
//			throw e;
//		} finally {
//			if (tmpconn != null) {
//				tmpconn.setAutoCommit(true);
//				StaticConnectionPool.returnConnection(tmpconn);
//			}
//		}
//		return strSeq;
//	}
//
//	public static int GenSeq(Connection conn, String branch, String strSysDate,
//			String strRefKind, String strSWIFTNO) throws Exception {
//		String strTemp;
//		int intSeq = 0;
//		int iSeq;
//		String refkindtmp = strRefKind;
//		String swiftnotmp = strSWIFTNO;
//		Connection tmpconn = null;
//		tab_seqcctrl seqcctrl = new tab_seqcctrl();
//		try {
//			tmpconn = StaticConnectionPool.getConnection();
//			tmpconn.setAutoCommit(false);
//			seqcctrl.oseabh = branch;
//
//			seqcctrl.date = strSysDate;
//			seqcctrl.refkind = refkindtmp;
//			seqcctrl.swiftno = swiftnotmp;
//			seqcctrl._conn = tmpconn;
//			seqcctrl.selectByPK();
//
//			seqcctrl.lastupddate = strSysDate;
//
//			seqcctrl.lastupdtime = DatetimeUtil.getTime();
//			if (seqcctrl._errorcode == 0) {
//				seqcctrl.holdByPK();
//				seqcctrl.selectByPK();
//				iSeq = seqcctrl.seq;
//				iSeq++;
//				strTemp = String.valueOf(iSeq);
//				seqcctrl.seq = Integer.parseInt(strTemp);
//				intSeq = seqcctrl.seq;
//				seqcctrl.updateByPK();
//			} else {
//				seqcctrl.seq = 1;
//				seqcctrl.insert();
//				intSeq = 1;
//			}
//			tmpconn.commit();
//		} catch (Exception e) {
//			tmpconn.rollback();
//			throw e;
//		} finally {
//			if (tmpconn != null) {
//				tmpconn.setAutoCommit(true);
//				StaticConnectionPool.returnConnection(tmpconn);
//			}
//		}
//		return intSeq;
//	}
//


	/***************************************************************************
	 * 说明：对日期字符串进行格式化输出 * 调用方法： 传入日期字符串及格式化分割符 * 返回值： 格式化（插入了分割符）后的日期 * 林婕翔
	 **************************************************************************/
	public static String FormatDate(String strDate, String dateseparator) {
		String strOutDate;
		int Len;

		Len = strDate.length();
		if ((Len != 6) && (Len != 8))
			strOutDate = strDate;
		else {
			if (Len == 6) {
				strDate = strDate.substring(0, 2) + dateseparator
						+ strDate.substring(2, 4) + dateseparator
						+ strDate.substring(4);
				strOutDate = strDate;
			} else {
				strDate = strDate.substring(0, 4) + dateseparator
						+ strDate.substring(4, 6) + dateseparator
						+ strDate.substring(6);
				strOutDate = strDate;
				strOutDate = strDate;
			}
		}
		return strOutDate;
	}

	/***************************************************************************
	 * 说明：对时间字符串进行格式化输出 * 调用方法： 传入时间字符串及格式化分割符 * 返回值： 格式化（插入了分割符）后的时间 * 林婕翔
	 **************************************************************************/
	public static String FormatTime(String strTime, String timesepartor) {
		String strOutTime;
		if (strTime.length() != 6)
			return strTime;
		strTime = strTime.substring(0, 2) + timesepartor
				+ strTime.substring(2, 4) + timesepartor + strTime.substring(4);
		strOutTime = strTime;
		return strOutTime;
	}

	// ***********************************************************************
	// 函数名：getFormatTime 功能：读取当前时间
	// 输入参数：无 输出参数：当前时间（HH:MM:SS）
	// ************************************************************************
	public String getFormatTime(String strdataformat) {
		String strFormatTime;
		GregorianCalendar gCalendar = new GregorianCalendar();
		SimpleDateFormat formatter = null;
		if (strdataformat == null || strdataformat.equals("")) {
			formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		} else {
			formatter = new SimpleDateFormat(strdataformat);
		}
		try {
			strFormatTime = formatter.format(gCalendar.getTime());
			strFormatTime = strFormatTime.substring(11, 19);
		} catch (Exception ex) {
			System.out.println("errMsg:" + ex.toString());
			return null;
		}
		return strFormatTime;
	}



	public static String TrimCrLf(String str) {
		String str1 = "";
		for (int i = 0; i < str.length(); i++)
			if (str.charAt(i) == '\n' || str.charAt(i) == '\r')
				str1 = str1 + " ";
			else
				str1 = str1 + str.charAt(i);
		return str1;
	}

	public static void setDbErrorMsg(ReturnMessage msg, String errorLay,
			String errormsg, int code) {
		StringBuffer errorMsg = new StringBuffer();
		msg.setErrCode(GlbFinal.ERRCODE_EXCEPTION);
		errorMsg.append(errorLay).append("||MSG:").append(errormsg).append(
				"||DBE:").append(code);
		msg.setMsg(errorMsg.toString());
	}

	public static void setDbErrorMsg(ReturnMessage msg, int code,
			String errorMsg) {
		StringBuffer buff = new StringBuffer();
		msg.setErrCode(GlbFinal.ERRCODE_EXCEPTION);
		msg.setResultCode("");
		if(errorMsg == null) {
			errorMsg = "";
		}
		buff.append(errorMsg).append(" DB Error[").append(code).append("]");
		msg.setMsg(buff.toString());
	}

	public static void setAppFailMsg(ReturnMessage msg, String error) {
		msg.setErrCode(GlbFinal.ERRCODE_FAIL);
		msg.setMsg(error);
	}

	public static void setAppFailMsg(ReturnMessage msg, String code,
			String errorMsg) {
		msg.setErrCode(GlbFinal.ERRCODE_FAIL);
		msg.setResultCode(code);
		msg.setMsg(errorMsg);
	}





}
